package projetoSDDama;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class TratadorEventos extends Application implements EventHandler<MouseEvent>, Observador{
	private Tabuleiro tabuleiro;

	
	public TratadorEventos(){}


	public TratadorEventos(Tabuleiro pTabuleiro){
		this.tabuleiro = pTabuleiro;
	}
	
	@Override
	public void start(Stage arg0) throws Exception {
	}

	@Override
	public void handle(MouseEvent eventoMouse) {		
			
		// Quando o bot�o ou o campoTexto � clicado
		if(eventoMouse.getEventType().equals(MouseEvent.MOUSE_CLICKED)){

			if(eventoMouse.getSource() instanceof TextField){
				tabuleiro.getCaixaTexto().setText("");
				
			} else {
				/* TODO - 
				 * 1) (controlador)criar validacao se jogador esta criando ou entrando em um jogo
				 * 2) inicializa as pecas, e exibe mensagem de 'aguarde oponente' ou n�o
				 * 3) se for o jogador criador, ser� o primeiro a jogar, desabilitando as pe�as
				 * do oponente (habilitarPecas)*/
				//String codigoTela = Controlador.getInstancia().criarJogo(tabuleiro.getCaixaTexto().getText());
				String codigoTela = Constantes.CD_TELA_INICIAL_JOGO;
				if(codigoTela.equals(Constantes.CD_TELA_INICIAL_JOGO)){
					tabuleiro.getCaixaTexto().setVisible(false);
					tabuleiro.getBotaoInicial().setVisible(false);
					tabuleiro.exibirPecas(Constantes.CD_OPCAO_TODOS);
					//tabuleiro.exibirPecas(Constantes.CD_PECAS_AZUIS);
				} else {
					tabuleiro.getBotaoInicial().setVisible(false);
					tabuleiro.getCaixaTexto().setText("Aguardando oponente...");
					tabuleiro.getCaixaTexto().setDisable(true);
					tabuleiro.getCaixaTexto().setOpacity(0.85);
				}
			}
			
		// Quando clica e arrasta
		} else if(eventoMouse.getEventType().equals(MouseEvent.MOUSE_DRAGGED)){
			int x = (int) eventoMouse.getSceneX();
			int y = (int) eventoMouse.getSceneY();
			arrastarPeca(eventoMouse);
		
		// Quando solta
		} else if(eventoMouse.getEventType().equals(MouseEvent.MOUSE_RELEASED)){
			/* TODO - criar metodo jogada no controlador que vai validar:
			 * 1) (controlador) verificar se posicao eh valida e realiza checagem
			 * de colisao e possibilidade de comer pecas do oponente
			 * 2) */
			int x = (int) eventoMouse.getSceneX();
			int y = (int) eventoMouse.getSceneY();

		//	arrastarPeca(eventoMouse);
//			int x = 0, y = 0;
//			int [] retorno = new int [2]; 
//			x = (int) eventoMouse.getSceneX();
//			y = (int) eventoMouse.getSceneY();
//			retorno = Controlador.getInstancia().ajustarCentro(x, y);
//			x = retorno[0];
//			y = retorno[1];
//			((Circle)eventoMouse.getSource()).setCenterX(x);
//			((Circle)eventoMouse.getSource()).setCenterY(y);
//		
		}
		
	}

	// Acao realizada enquanto clica, segura e arrasta a peca pelo tabuleiro
	private void arrastarPeca(MouseEvent eventoMouse) {
//		((Circle)eventoMouse.getSource()).setCenterX(eventoMouse.getSceneX());
//		((Circle)eventoMouse.getSource()).setCenterY(eventoMouse.getSceneY());
		//System.out.println("aquiva");
		int x = 0, y = 0;
		int [] retorno = new int [2]; 
		x = (int) eventoMouse.getSceneX();
		y = (int) eventoMouse.getSceneY();
		retorno = Controlador.getInstancia().ajustarCentro(x, y);
		x = retorno[0];
		y = retorno[1];
//		((Circle)eventoMouse.getSource()).setCenterX(x);
//		((Circle)eventoMouse.getSource()).setCenterY(y);
		
		if (Controlador.moverCasaPreta(x, y)) {
			((Circle)eventoMouse.getSource()).setCenterX(x);
			((Circle)eventoMouse.getSource()).setCenterY(y);	
		} else {
			// voltar para posicao inicial
			//((Circle)eventoMouse.getSource()).setCenterX(xPosicaoInicial);
			//((Circle)eventoMouse.getSource()).setCenterY(yPosicaoInicial);
			
		}
		System.out.println("aqui");
		
	
		
	}

	@Override
	public void atualizar(Jogo jogo) {
		// TODO Auto-generated method stub
		
	}
}
